package principal;

import java.awt.Component;
import java.awt.geom.Point2D;


public class ReconocedorDecision implements IReconocedorFormas{

	private Trazo t;	
	
	public void setTrazo(Trazo t) {
		this.t = t;
	}
	
	public int reconoceTrazo() {

		
		Point2D centro = t.getCentroMasa();
		Point2D der = t.get_point_mas_derecha();
		Point2D izq = t.get_point_mas_izquierda();
		Point2D bajo = t.get_point_mas_bajo();
		Point2D alto = t.get_point_mas_alto();
		
		/* Diferencia de posicion entre el punto mas alto y el centro
		 * Para + debe ser mucho menor que para x
		 */
		double dist_alto = Math.abs(centro.getX()-alto.getX());
		
		double dist_bajo = Math.abs(centro.getX()-bajo.getX());
		
		/* Diferencia de posicion entre el centro y lo puntos de los lados
		 * Mide la diferencia en altura, para + debe ser mucho mnor que para x
		 */
		double dist_izq = Math.abs(centro.getY()-izq.getY());
		double dist_der = Math.abs(centro.getY()-der.getY());
		
		/* 
		 * Normalizo, tomando como unidad la dieferencia del centro de masa a un extremo
		 */
		double dist_max = Math.abs(centro.getX()-der.getX());
		
		double[] distancias = new double[4];
		
		distancias[0] = dist_alto/dist_max;
		distancias[1] = dist_bajo/dist_max;
		distancias[2] = dist_izq/dist_max;
		distancias[3] = dist_der/dist_max;
		
		double sim_mas = similitud_mas(distancias);
		double sim_por = similitud_por(distancias);
		
		if(sim_mas<sim_por)
			return 1;
		else
			return 2;
	}

	private double similitud_por(double[] distancias) {
		double[] diferencias = new double[8];
		diferencias[0]=Math.abs(distancias[0]-1);
		diferencias[1]=Math.abs(distancias[1]-1);
		diferencias[2]=Math.abs(distancias[2]-1);
		diferencias[3]=Math.abs(distancias[3]-1);
		
		return media_distancias(diferencias);
	}

	private double similitud_mas(double[] distancias) {

		
		return media_distancias(distancias);
	}
	
	private double media_distancias(double[] distancias) {
		double suma = 0;
		for(int i=0;i<distancias.length;i++)
			suma+=distancias[i];
		return suma/distancias.length;
	}

	@Override
	public String reconoceEscritura(Component c) {
		// TODO Auto-generated method stub
		return null;
	}

}
